#ifndef __H_MVP_TRANSPORT_RECEIVER_H__
#define __H_MVP_TRANSPORT_RECEIVER_H__

#include <memory>
#include <functional>

namespace motovis {
namespace transport {

template <typename MessageT>
class Receiver {
public:
    using MessagePtr = std::shared_ptr<MessageT>;
    using MessageListener = std::function<void(const MessagePtr& msg)>;

    virtual ~Receiver();
    virtual void addListener(const std::string& channel_name, const MessageListener& msg_listener) = 0;
};

template <typename MessageT>
Receiver<MessageT>::~Receiver() {}

} // namespace transport
} // namespace motovis

#endif // __H_MVP_TRANSPORT_RECEIVER_H__
